/*
 *   Copyright Spectra, Inc. All Rights Reserved.
 */
package spectra.ee.web.account.model;

import java.io.Serializable;
import java.util.Hashtable;

import spectra.base.ajax.AjaxBaseForm;

/**
 * 사용자(t_account) 테이블 모델 클래스.
 *
 * @author sungsi
 */
public class Account extends AjaxBaseForm implements Serializable
{
    /** 시리얼버전UID. */
    private static final long serialVersionUID = 6416867597256892288L;

    /** 사용자ID. */
    protected String accountId;

    /** 사용자그룹ID. */
    protected String accountGroupId;

    /** 롤ID. */
    protected String roleId;

    /** 패스워드. */
    protected String password;

    /** 사용자명. */
    protected String accountName;

    /** 이메일. */
    protected String email;

    /** 로케일. */
    //protected int locale;

    /** 타임존. */
    protected String timeZone;

    /** 삭제여부. (Y: 삭제됨, N: 삭제안됨) */
    protected String deleteFlag;

    /** 로그인여부. (Y: 로그인함, N: 로그인안함) */
    protected String loginFlag;

    /** 작업상태. 5자리 플래그문자. (QnA, 채팅, 여분 3자리순) */
    protected String workStatus;

    /** 락플래그. */
    protected String lockFlag;

    /** 로그인실패횟수. */
    protected int loginFailCount;

    /** 최근패스워드목록. */
    protected String lastPasswordList;

    /** 사진파일명. */
    protected String photoFilename;

    /** 설명. */
    protected String description;

    /** 로그인일자. */
    protected String loginDate;

    /** 로그아웃일자. */
    protected String logoutDate;

    /** 패스워드수정일자. */
    protected String passwordUpdatedDate;

    /** 등록일자. */
    protected String createdDate;

    /** 등록자ID. */
    protected String createdBy;

    /** 수정일자. */
    protected String updatedDate;

    /** 수정자ID. */
    protected String updatedBy;

    // 추가된 멤버들
    /** 세션ID. 로그인처리시 t_loginsession용으로 사용. */
    protected String sessionId;

    /** IP주소. */
    protected String ipAddress;

    /** 비로그인 기간 */
    protected int noLoginPeriod;
    
    /** 개인정보 수정시 현재 비밀번호 */
    protected String currentPassword;
    
    protected Hashtable accountPropertyValue;
    /**
     * 생성자.
     */
    public Account()
    {
        super();
    }

    /**
     * 생성자.
     *
     * @param accountId 사용자ID.
     */
    public Account(String accountId)
    {
        super();
        this.accountId = accountId;
    }

    /**
     * 생성자.
     *
     * @param accountId 사용자ID.
     * @param accountGroupId 사용자그룹ID.
     * @param roleId 롤ID.
     * @param password 패스워드.
     * @param accountName 사용자명.
     * @param email 이메일.
     * @param locale 로케일.
     * @param timeZone 타임존.
     * @param deleteFlag 삭제여부. (Y: 삭제, N: 미삭제)
     * @param loginFlag 로그인여부. (Y: 로그인함, N: 로그인안함)
     * @param workStatus 작업상태. 5자리 플래그문자.<br/>
     *            - C1 : QnA작업상태(Y: 작업중, N: 작업중지)<br/>
     *            - C2 : 채팅작업상태(Y: 작업중, N: 작업중지)<br/>
     *            - C3~5 : 예약(기본값 N)
     * @param lockFlag 락플래그.
     * @param loginFailCount 로그인실패횟수.
     * @param lastPasswordList 최근패스워드목록.
     * @param photoFilename 사진파일명
     * @param description 설명.
     * @param loginDate 로그인일자.
     * @param logoutDate 로그아웃일자
     * @param passwordUpdatedDate 패스워드수정일자
     * @param createdDate 등록일자.
     * @param createdBy 등록자ID.
     * @param updatedDate 수정일자.
     * @param updatedBy 수정자ID.
     */
    public Account(String accountId, String accountGroupId, String roleId, String password, String accountName, String email, int locale, String timeZone, String deleteFlag, String loginFlag, String workStatus, String lockFlag, int loginFailCount, String lastPasswordList, String photoFilename, String description, String loginDate, String logoutDate, String passwordUpdatedDate, String createdDate, String createdBy, String updatedDate, String updatedBy)
    {
        super();
        this.accountId = accountId;
        this.accountGroupId = accountGroupId;
        this.roleId = roleId;
        this.password = password;
        this.accountName = accountName;
        this.email = email;
        this.locale = locale;
        this.timeZone = timeZone;
        this.deleteFlag = deleteFlag;
        this.loginFlag = loginFlag;
        this.workStatus = workStatus;
        this.lockFlag = lockFlag;
        this.loginFailCount = loginFailCount;
        this.lastPasswordList = lastPasswordList;
        this.photoFilename = photoFilename;
        this.description = description;
        this.loginDate = loginDate;
        this.logoutDate = logoutDate;
        this.passwordUpdatedDate = passwordUpdatedDate;
        this.createdDate = createdDate;
        this.createdBy = createdBy;
        this.updatedDate = updatedDate;
        this.updatedBy = updatedBy;
    }

    /**
     * 복사 생성자.
     *
     * @param account <code>Account</code> 객체.
     */
    public Account(Account account)
    {
        super();
        this.accountId = account.accountId;
        this.accountGroupId = account.accountGroupId;
        this.roleId = account.roleId;
        this.password = account.password;
        this.accountName = account.accountName;
        this.email = account.email;
        this.locale = account.locale;
        this.timeZone = account.timeZone;
        this.deleteFlag = account.deleteFlag;
        this.loginFlag = account.loginFlag;
        this.workStatus = account.workStatus;
        this.lockFlag = account.lockFlag;
        this.loginFailCount = account.loginFailCount;
        this.lastPasswordList = account.lastPasswordList;
        this.photoFilename = account.photoFilename;
        this.description = account.description;
        this.loginDate = account.loginDate;
        this.logoutDate = account.logoutDate;
        this.passwordUpdatedDate = account.passwordUpdatedDate;
        this.createdDate = account.createdDate;
        this.createdBy = account.createdBy;
        this.updatedDate = account.updatedDate;
        this.updatedBy = account.updatedBy;
        this.sessionId = account.sessionId;
        this.ipAddress = account.ipAddress;
    }

    /**
     * 사용자그룹ID getter.
     *
     * @return 사용자그룹ID.
     */
    public String getAccountGroupId()
    {
        return accountGroupId;
    }

    /**
     * 사용자그룹ID setter.
     *
     * @param accountGroupId 사용자그룹ID.
     */
    public void setAccountGroupId(String accountGroupId)
    {
        this.accountGroupId = accountGroupId;
    }

    /**
     * 사용자ID getter.
     *
     * @return 사용자ID.
     */
    public String getAccountId()
    {
        return accountId;
    }

    /**
     * 사용자ID setter.
     *
     * @param accountId 사용자ID.
     */
    public void setAccountId(String accountId)
    {
        this.accountId = accountId;
    }

    /**
     * 사용자명 getter.
     *
     * @return 사용자명.
     */
    public String getAccountName()
    {
        return accountName;
    }

    /**
     * 사용자명 setter.
     *
     * @param accountName 사용자명.
     */
    public void setAccountName(String accountName)
    {
        this.accountName = accountName;
    }

    /**
     * 등록자ID getter.
     *
     * @return 등록자ID.
     */
    public String getCreatedBy()
    {
        return createdBy;
    }

    /**
     * 등록자ID setter.
     *
     * @param createdBy 등록자ID.
     */
    public void setCreatedBy(String createdBy)
    {
        this.createdBy = createdBy;
    }

    /**
     * 등록일자 getter.
     *
     * @return 등록일자.
     */
    public String getCreatedDate()
    {
        return createdDate;
    }

    /**
     * 등록일자 setter.
     *
     * @param createdDate 등록일자.
     */
    public void setCreatedDate(String createdDate)
    {
        this.createdDate = createdDate;
    }

    /**
     * 삭제여부 getter.
     *
     * @return 삭제여부. (Y: 삭제, N: 미삭제)
     */
    public String getDeleteFlag()
    {
        return deleteFlag;
    }

    /**
     * 삭제여부 setter.
     *
     * @param deleteFlag 삭제여부. (Y: 삭제, N: 미삭제)
     */
    public void setDeleteFlag(String deleteFlag)
    {
        this.deleteFlag = deleteFlag;
    }

    /**
     * 설명 getter.
     *
     * @return 설명.
     */
    public String getDescription()
    {
        return description;
    }

    /**
     * 설명 setter.
     *
     * @param description 설명.
     */
    public void setDescription(String description)
    {
        this.description = description;
    }

    /**
     * 이메일 getter.
     *
     * @return 이메일.
     */
    public String getEmail()
    {
        return email;
    }

    /**
     * 이메일 setter.
     *
     * @param email 이메일.
     */
    public void setEmail(String email)
    {
        this.email = email;
    }

    /**
     * 최근패스워드목록 getter.
     *
     * @return 최근패스워드목록.
     */
    public String getLastPasswordList()
    {
        return lastPasswordList;
    }

    /**
     * 최근패스워드목록 setter.
     *
     * @param lastPasswordList 최근패스워드목록.
     */
    public void setLastPasswordList(String lastPasswordList)
    {
        this.lastPasswordList = lastPasswordList;
    }

    /**
     * 로케일 getter.
     *
     * @return 로케일.
     */
    public int getLocale()
    {
        return locale;
    }

    /**
     * 로케일 setter.
     *
     * @param locale 로케일.
     */
    public void setLocale(int locale)
    {
        this.locale = locale;
    }

    /**
     * 락플래그 getter.
     *
     * @return 락플래그.
     */
    public String getLockFlag()
    {
        return lockFlag;
    }

    /**
     * 락플래그 setter.
     *
     * @param lockFlag 락플래그.
     */
    public void setLockFlag(String lockFlag)
    {
        this.lockFlag = lockFlag;
    }

    /**
     * 로그인일자 getter.
     *
     * @return 로그인일자.
     */
    public String getLoginDate()
    {
        return loginDate;
    }

    /**
     * 로그인일자 setter.
     *
     * @param loginDate 로그인일자.
     */
    public void setLoginDate(String loginDate)
    {
        this.loginDate = loginDate;
    }

    /**
     * 로그인실패횟수 getter.
     *
     * @return 로그인실패횟수.
     */
    public int getLoginFailCount()
    {
        return loginFailCount;
    }

    /**
     * 로그인실패횟수 setter.
     *
     * @param loginFailCount 로그인실패횟수.
     */
    public void setLoginFailCount(int loginFailCount)
    {
        this.loginFailCount = loginFailCount;
    }

    /**
     * 로그인여부 getter.
     *
     * @return 로그인여부. (Y: 로그인함, N: 로그인안함)
     */
    public String getLoginFlag()
    {
        return loginFlag;
    }

    /**
     * 로그인여부 setter.
     *
     * @param loginFlag 로그인여부. (Y: 로그인함, N: 로그인안함)
     */
    public void setLoginFlag(String loginFlag)
    {
        this.loginFlag = loginFlag;
    }

    /**
     * 로그아웃일자 getter.
     *
     * @return 로그아웃일자.
     */
    public String getLogoutDate()
    {
        return logoutDate;
    }

    /**
     * 로그아웃일자 setter.
     *
     * @param logoutDate 로그아웃일자.
     */
    public void setLogoutDate(String logoutDate)
    {
        this.logoutDate = logoutDate;
    }

    /**
     * 패스워드 getter.
     *
     * @return 패스워드.
     */
    public String getPassword()
    {
        return password;
    }

    /**
     * 패스워드 setter.
     *
     * @param password 패스워드.
     */
    public void setPassword(String password)
    {
        this.password = password;
    }

    /**
     * 패스워드수정일자 getter.
     *
     * @return 패스워드수정일자.
     */
    public String getPasswordUpdatedDate()
    {
        return passwordUpdatedDate;
    }

    /**
     * 패스워드수정일자 setter.
     *
     * @param passwordUpdatedDate 패스워드수정일자.
     */
    public void setPasswordUpdatedDate(String passwordUpdatedDate)
    {
        this.passwordUpdatedDate = passwordUpdatedDate;
    }

    /**
     * 사진파일명 getter.
     *
     * @return 사진파일명.
     */
    public String getPhotoFilename()
    {
        return photoFilename;
    }

    /**
     * 사진파일명 setter.
     *
     * @param photoFilename 사진파일명.
     */
    public void setPhotoFilename(String photoFilename)
    {
        this.photoFilename = photoFilename;
    }

    /**
     * 롤ID getter.
     *
     * @return 롤ID.
     */
    public String getRoleId()
    {
        return roleId;
    }

    /**
     * 롤ID setter.
     *
     * @param roleId 롤ID.
     */
    public void setRoleId(String roleId)
    {
        this.roleId = roleId;
    }

    /**
     * 타임존 getter.
     *
     * @return 타임존.
     */
    public String getTimeZone()
    {
        return timeZone;
    }

    /**
     * 타임존 setter.
     *
     * @param timeZone 타임존.
     */
    public void setTimeZone(String timeZone)
    {
        this.timeZone = timeZone;
    }

    /**
     * 수정자ID getter.
     *
     * @return 수정자ID.
     */
    public String getUpdatedBy()
    {
        return updatedBy;
    }

    /**
     * 수정자ID setter.
     *
     * @param updatedBy 수정자ID.
     */
    public void setUpdatedBy(String updatedBy)
    {
        this.updatedBy = updatedBy;
    }

    /**
     * 수정일자 getter.
     *
     * @return 수정일자.
     */
    public String getUpdatedDate()
    {
        return updatedDate;
    }

    /**
     * 수정일자 setter.
     *
     * @param updatedDate 수정일자.
     */
    public void setUpdatedDate(String updatedDate)
    {
        this.updatedDate = updatedDate;
    }

    /**
     * 작업상태 getter.
     *
     * @return workStatus.. 5자리 플래그문자.<br/>
     *         - C1 : QnA작업상태(Y: 작업중, N: 작업중지)<br/>
     *         - C2 : 채팅작업상태(Y: 작업중, N: 작업중지)<br/>
     *         - C3~5 : 예약(기본값 N)
     */
    public String getWorkStatus()
    {
        return workStatus;
    }

    /**
     * 작업상태 setter.
     *
     * @param workStatus 작업상태. 5자리 플래그문자.<br/>
     *            - C1 : QnA작업상태(Y: 작업중, N: 작업중지)<br/>
     *            - C2 : 채팅작업상태(Y: 작업중, N: 작업중지)<br/>
     *            - C3~5 : 예약(기본값 N)
     */
    public void setWorkStatus(String workStatus)
    {
        this.workStatus = workStatus;
    }

    /**
     * 세션ID getter.
     *
     * @return 세션ID.
     */
    public String getSessionId()
    {
        return sessionId;
    }

    /**
     * 세션ID setter.
     *
     * @param sessionId 세션ID.
     */
    public void setSessionId(String sessionId)
    {
        this.sessionId = sessionId;
    }

    /**
     * IP주소 getter.
     *
     * @return IP주소.
     */
    public String getIpAddress()
    {
        return ipAddress;
    }

    /**
     * IP주소 setter.
     *
     * @param ipAddress IP주소.
     */
    public void setIpAddress(String ipAddress)
    {
        this.ipAddress = ipAddress;
    }

    /**
     * 비로그인 기간 getter.
     * 
     * @return 비로그인 기간.
     */
    public int getNoLoginPeriod()
    {
        return noLoginPeriod;
    }

    /**
     * 비로그인 기간 setter.
     * 
     * @param loginPeriod 비로그인 기간.
     */
    public void setNoLoginPeriod(int noLoginPeriod)
    {
        this.noLoginPeriod = noLoginPeriod;
    }
    
    
    public Hashtable getAccountPropertyValue() 
    {
		return accountPropertyValue;
	}

	public void setAccountPropertyValue(Hashtable accountPropertyValue) 
	{
		this.accountPropertyValue = accountPropertyValue;
	}

	public static long getSerialversionuid() 
	{
		return serialVersionUID;
	}
	
	public String getCurrentPassword() 
	{
		return currentPassword;
	}

	public void setCurrentPassword(String currentPassword) 
	{
		this.currentPassword = currentPassword;
	}

	/**
     * 모든 멤버변수에 대해 name = value 형태의 문자열을 가져온다.
     *
     * @return 모든 멤버변수에 대한 name = value 형태의 문자열.
     */
    public String toString()
    {
        StringBuffer sbRet = new StringBuffer();

        sbRet.append("Account(").append(super.toString()).append("\taccountId=").append(this.accountId).append("\taccountGroupId=").append(this.accountGroupId).append("\troleId=").append(this.roleId).append("\tpassword=").append(this.password).append("\taccountName=").append(this.accountName).append("\temail=").append(this.email).append("\tlocale=").append(this.locale).append("\ttimeZone=").append(this.timeZone).append("\tdeleteFlag=").append(this.deleteFlag).append("\tloginFlag=").append(this.loginFlag).append("\tworkStatus=").append(this.workStatus).append("\tlockFlag=").append(this.lockFlag).append("\tloginFailCount=").append(this.loginFailCount).append("\tlastPasswordList=").append(this.lastPasswordList).append("\tphotoFilename=").append(this.photoFilename).append("\tdescription=").append(this.description).append("\tloginDate=").append(this.loginDate).append("\tlogoutDate=").append(this.logoutDate).append("\tpasswordUpdatedDate=").append(this.passwordUpdatedDate).append("\tcreatedDate=").append(this.createdDate).append("\tcreatedBy=").append(this.createdBy).append("\tupdatedDate=").append(this.updatedDate).append("\tupdatedBy=").append(this.updatedBy).append("\tsessionId=").append(this.sessionId).append("\tipAddress=").append(this.ipAddress).append(")");

        return sbRet.toString();
    }
}
